package cn.zyl.demo.common.tools;

import cn.zyl.demo.common.enums.MsgEnum;
import cn.zyl.demo.common.enums.RegexEnum;
import cn.zyl.demo.common.exception.ToolsException;
import cn.zyl.demo.common.permanent.MsgProperties;
import jdk.nashorn.internal.runtime.regexp.joni.Regex;

/**
 * ValidTool工具类说明:
 *
 * @author wsz
 * @version v1.0
 * @date 2020-07-23
 */
public class ValidTool {
    private ValidTool() { throw new IllegalAccessError("ValidTool"); }
    /** 验证带区号的长度 */
    private final static int FIXED_PHONE_LENGTH = 8;
    /**
     * 固定电话号码验证
     * @param telephone 待验证的字符串
     * @return 验证通过返回true
     */
    public static boolean checkFixedPhone(String telephone) {
        if(StringTool.isBlank(telephone)){ return false; }
        // 验证带区号的;验证没有区号的
        return regex(telephone,(telephone.length() > FIXED_PHONE_LENGTH)?
                RegexEnum.AREA_CODE_FIXED_PHONE: RegexEnum.NO_AREA_CODE_FIXED_PHONE);
    }
    /**
     * 自定义正则验证内容
     * @param str 待验证的内容
     * @param regex 待使用的正则
     * @return 验证是否通过
     * @throws ToolsException 正则为空
     */
    public static boolean regex(String str,String regex) throws ToolsException {
        ToolsException.isTrueThrow(StringTool.isEmpty(regex), MsgProperties.get(MsgEnum.ERROR_REGEX_EMPTY));
        if(StringTool.isEmpty(str)){ return false; }
        return str.matches(regex);
    }
    /**
     * 自定义正则验证内容
     * @param str 待验证的内容
     * @param regex 待使用的正则
     * @return 验证是否通过
     * @throws ToolsException 正则为空
     */
    public static boolean regex(String str, RegexEnum regex) throws ToolsException {
        ToolsException.isTrueThrow(null == regex, MsgProperties.get(MsgEnum.ERROR_REGEX_EMPTY));
        return regex(str,regex.getRegex());
    }

    public static void main(String[] args) {
        System.out.println(checkFixedPhone("88888888"));
        System.out.println(checkFixedPhone("011-88888888"));
        System.out.println(regex("13218819990101191X",RegexEnum.ID_CARD));
    }
}